from django.db import models

from django.contrib.auth.models import AbstractUser

# Create your models here.
# models.py
"""
本文件基于原 SQL 文件（you_lai_boot 数据库）的表结构，
结合 Django REST framework 的最佳实践，
实现了各数据表对应的模型定义。
注：部分表（如用户、角色、菜单）已结合 Django 内置认证及权限体系做了适当调整，
      代码生成相关表若非业务需要，可根据项目需求重新设计或忽略。
"""


# ------------------------------
# 1. 部门表 (sys_dept)
# ------------------------------
class Department(models.Model):
    """
    表名：sys_dept
    表说明：部门表，用于记录公司或组织的部门信息。
    """
    name = models.CharField(max_length=100, verbose_name="部门名称", help_text="部门名称")
    code = models.CharField(max_length=100, unique=True, verbose_name="部门编号", help_text="部门编号")
    parent_id = models.BigIntegerField(default=0, verbose_name="父节点ID", help_text="父节点ID")
    tree_path = models.CharField(max_length=255, verbose_name="父节点ID路径", help_text="父节点ID路径")
    sort = models.SmallIntegerField(default=0, verbose_name="显示顺序", help_text="显示顺序")
    status = models.SmallIntegerField(default=1, verbose_name="状态", help_text="状态（1-正常 0-禁用）")
    create_by = models.BigIntegerField(null=True, blank=True, verbose_name="创建人ID", help_text="创建人ID")
    create_time = models.DateTimeField(null=True, blank=True, verbose_name="创建时间", help_text="创建时间")
    update_by = models.BigIntegerField(null=True, blank=True, verbose_name="修改人ID", help_text="修改人ID")
    update_time = models.DateTimeField(null=True, blank=True, verbose_name="更新时间", help_text="更新时间")
    is_deleted = models.SmallIntegerField(default=0, verbose_name="逻辑删除标识",
                                          help_text="逻辑删除标识（1-已删除 0-未删除）")

    class Meta:
        db_table = 'sys_dept'
        verbose_name = "部门表"
        verbose_name_plural = "部门表"

    def __str__(self):
        return self.name


# ------------------------------
# 2. 字典类型表 (sys_dict)
# ------------------------------
class Dictionary(models.Model):
    """
    表名：sys_dict
    表说明：字典类型表，用于存储各种业务枚举、状态、类型等的编码和名称。
    """
    dict_code = models.CharField(max_length=50, verbose_name="类型编码", help_text="类型编码")
    name = models.CharField(max_length=50, verbose_name="类型名称", help_text="类型名称")
    status = models.SmallIntegerField(default=0, verbose_name="状态", help_text="状态（0: 正常; 1: 禁用）")
    remark = models.CharField(max_length=255, blank=True, null=True, verbose_name="备注", help_text="备注")
    create_time = models.DateTimeField(null=True, blank=True, verbose_name="创建时间", help_text="创建时间")
    create_by = models.BigIntegerField(null=True, blank=True, verbose_name="创建人ID", help_text="创建人ID")
    update_time = models.DateTimeField(null=True, blank=True, verbose_name="更新时间", help_text="更新时间")
    update_by = models.BigIntegerField(null=True, blank=True, verbose_name="修改人ID", help_text="修改人ID")
    is_deleted = models.SmallIntegerField(default=0, verbose_name="是否删除", help_text="是否删除（1-删除，0-未删除）")

    class Meta:
        db_table = 'sys_dict'
        verbose_name = "字典类型表"
        verbose_name_plural = "字典类型表"

    def __str__(self):
        return self.name


# ------------------------------
# 3. 字典项表 (sys_dict_item)
# ------------------------------
class DictionaryItem(models.Model):
    """
    表名：sys_dict_item
    表说明：字典项表，用于记录字典中每个具体项的值和标签。
    """
    dict_code = models.CharField(max_length=50, verbose_name="关联字典编码",
                                 help_text="关联字典编码，与 sys_dict 表中的 dict_code 对应")
    value = models.CharField(max_length=50, verbose_name="字典项值", help_text="字典项值")
    label = models.CharField(max_length=100, verbose_name="字典项标签", help_text="字典项标签")
    tag_type = models.CharField(max_length=50, blank=True, null=True, verbose_name="标签类型",
                                help_text="标签类型（前端展示用）")
    status = models.SmallIntegerField(default=0, verbose_name="状态", help_text="状态（1-正常，0-禁用）")
    sort = models.IntegerField(default=0, verbose_name="排序", help_text="排序")
    remark = models.CharField(max_length=255, blank=True, null=True, verbose_name="备注", help_text="备注")
    create_time = models.DateTimeField(null=True, blank=True, verbose_name="创建时间", help_text="创建时间")
    create_by = models.BigIntegerField(null=True, blank=True, verbose_name="创建人ID", help_text="创建人ID")
    update_time = models.DateTimeField(null=True, blank=True, verbose_name="更新时间", help_text="更新时间")
    update_by = models.BigIntegerField(null=True, blank=True, verbose_name="修改人ID", help_text="修改人ID")

    class Meta:
        db_table = 'sys_dict_item'
        verbose_name = "字典项表"
        verbose_name_plural = "字典项表"

    def __str__(self):
        return self.label


# ------------------------------
# 4. 菜单表 (sys_menu)
# ------------------------------
class Menu(models.Model):
    """
    表名：sys_menu
    表说明：系统菜单表，用于记录前端菜单、路由及按钮权限等信息。
    """
    parent_id = models.BigIntegerField(verbose_name="父菜单ID", help_text="父菜单ID")
    tree_path = models.CharField(max_length=255, blank=True, null=True, verbose_name="父节点ID路径",
                                 help_text="父节点ID路径")
    name = models.CharField(max_length=64, verbose_name="菜单名称", help_text="菜单名称")
    type = models.SmallIntegerField(verbose_name="菜单类型", help_text="菜单类型（1-菜单, 2-目录, 3-外链, 4-按钮）")
    route_name = models.CharField(max_length=255, blank=True, null=True, verbose_name="路由名称",
                                  help_text="路由名称（用于命名路由）")
    route_path = models.CharField(max_length=128, blank=True, null=True, verbose_name="路由路径", help_text="路由路径")
    component = models.CharField(max_length=128, blank=True, null=True, verbose_name="组件路径",
                                 help_text="组件路径（相对于前端视图路径）")
    perm = models.CharField(max_length=128, blank=True, null=True, verbose_name="权限标识",
                            help_text="权限标识（按钮专用）")
    always_show = models.SmallIntegerField(default=0, verbose_name="是否始终显示",
                                           help_text="【目录】仅一个子路由时是否始终显示（1-是, 0-否）")
    keep_alive = models.SmallIntegerField(default=0, verbose_name="页面缓存",
                                          help_text="【菜单】是否开启页面缓存（1-是, 0-否）")
    visible = models.SmallIntegerField(default=1, verbose_name="显示状态", help_text="显示状态（1-显示, 0-隐藏）")
    sort = models.IntegerField(default=0, verbose_name="排序", help_text="排序")
    icon = models.CharField(max_length=64, blank=True, null=True, verbose_name="菜单图标", help_text="菜单图标")
    redirect = models.CharField(max_length=128, blank=True, null=True, verbose_name="跳转路径", help_text="跳转路径")
    create_time = models.DateTimeField(null=True, blank=True, verbose_name="创建时间", help_text="创建时间")
    update_time = models.DateTimeField(null=True, blank=True, verbose_name="更新时间", help_text="更新时间")
    params = models.CharField(max_length=255, blank=True, null=True, verbose_name="路由参数", help_text="路由参数")

    class Meta:
        db_table = 'sys_menu'
        verbose_name = "菜单表"
        verbose_name_plural = "菜单表"

    def __str__(self):
        return self.name


# ------------------------------
# 5. 角色表 (sys_role)
# ------------------------------
class Role(models.Model):
    """
    表名：sys_role
    表说明：角色表，用于记录系统中各角色信息及其权限范围。
    """
    name = models.CharField(max_length=64, unique=True, verbose_name="角色名称", help_text="角色名称")
    code = models.CharField(max_length=32, unique=True, verbose_name="角色编码", help_text="角色编码")
    sort = models.IntegerField(blank=True, null=True, verbose_name="显示顺序", help_text="显示顺序")
    status = models.SmallIntegerField(default=1, verbose_name="状态", help_text="状态（1-正常, 0-停用）")
    data_scope = models.SmallIntegerField(blank=True, null=True, verbose_name="数据权限",
                                          help_text="数据权限（1-所有数据, 2-部门及子部门, 3-本部门, 4-本人）")
    create_by = models.BigIntegerField(null=True, blank=True, verbose_name="创建人ID", help_text="创建人ID")
    create_time = models.DateTimeField(null=True, blank=True, verbose_name="创建时间", help_text="创建时间")
    update_by = models.BigIntegerField(null=True, blank=True, verbose_name="更新人ID", help_text="更新人ID")
    update_time = models.DateTimeField(null=True, blank=True, verbose_name="更新时间", help_text="更新时间")
    is_deleted = models.SmallIntegerField(default=0, verbose_name="逻辑删除",
                                          help_text="逻辑删除标识（0-未删除, 1-已删除）")

    class Meta:
        db_table = 'sys_role'
        verbose_name = "角色表"
        verbose_name_plural = "角色表"

    def __str__(self):
        return self.name


# ------------------------------
# 6. 角色与菜单关联表 (sys_role_menu)
# ------------------------------
class RoleMenu(models.Model):
    """
    表名：sys_role_menu
    表说明：记录角色与菜单之间的关联关系，定义每个角色可访问的菜单。
    """
    role = models.ForeignKey(Role, on_delete=models.CASCADE, verbose_name="角色ID", help_text="角色ID")
    menu = models.ForeignKey(Menu, on_delete=models.CASCADE, verbose_name="菜单ID", help_text="菜单ID")

    class Meta:
        db_table = 'sys_role_menu'
        verbose_name = "角色菜单关联表"
        verbose_name_plural = "角色菜单关联表"
        unique_together = ('role', 'menu')

    def __str__(self):
        return f"{self.role.name} - {self.menu.name}"


# ------------------------------
# 7. 用户表 (sys_user) —— 自定义用户模型（继承 AbstractUser）
# ------------------------------

class User(AbstractUser):
    """
    自定义用户模型，继承自 AbstractUser，增加了业务相关字段
    """
    nickname = models.CharField(max_length=64, blank=True, null=True, verbose_name="昵称", help_text="用户昵称")
    gender = models.SmallIntegerField(default=1, verbose_name="性别", help_text="性别（1-男, 2-女, 0-保密）")
    dept = models.ForeignKey('Department', on_delete=models.SET_NULL, null=True, blank=True, verbose_name="部门ID",
                             help_text="部门ID")
    avatar = models.CharField(max_length=255, blank=True, null=True, verbose_name="头像", help_text="用户头像")
    mobile = models.CharField(max_length=20, blank=True, null=True, verbose_name="联系方式", help_text="联系方式")
    status = models.SmallIntegerField(default=1, verbose_name="状态", help_text="状态（1-正常, 0-禁用）")
    is_deleted = models.SmallIntegerField(default=0, verbose_name="逻辑删除",
                                          help_text="逻辑删除标识（0-未删除, 1-已删除）")
    openid = models.CharField(max_length=28, blank=True, null=True, verbose_name="微信 OpenID", help_text="微信 openid")
    roles = models.ManyToManyField('Role', through='UserRole', verbose_name="角色", help_text="用户角色关联")

    # 设置 `related_name` 避免与默认 User 模型的 `groups` 和 `user_permissions` 字段产生冲突
    groups = models.ManyToManyField(
        'auth.Group',
        related_name='custom_user_groups',  # 新的反向关系名
        blank=True,
        help_text='The groups this user belongs to.',
        verbose_name='groups'
    )
    user_permissions = models.ManyToManyField(
        'auth.Permission',
        related_name='custom_user_permissions',  # 新的反向关系名
        blank=True,
        help_text='Specific permissions for this user.',
        verbose_name='user permissions'
    )

    class Meta:
        db_table = 'sys_user'
        verbose_name = "用户表"
        verbose_name_plural = "用户表"

    def __str__(self):
        return self.username


# ------------------------------
# 8. 用户与角色关联表 (sys_user_role)
# ------------------------------
class UserRole(models.Model):
    """
    表名：sys_user_role
    表说明：记录用户与角色之间的关联关系。
    """
    user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="用户ID", help_text="用户ID")
    role = models.ForeignKey(Role, on_delete=models.CASCADE, verbose_name="角色ID", help_text="角色ID")

    class Meta:
        db_table = 'sys_user_role'
        verbose_name = "用户角色关联表"
        verbose_name_plural = "用户角色关联表"
        unique_together = ('user', 'role')

    def __str__(self):
        return f"{self.user.username} - {self.role.name}"


# ------------------------------
# 9. 日志表 (sys_log)
# ------------------------------
class Log(models.Model):
    """
    表名：sys_log
    表说明：操作日志表，用于记录系统中各类操作的详细日志信息。
    """
    module = models.CharField(max_length=50, verbose_name="日志模块", help_text="日志模块")
    request_method = models.CharField(max_length=64, verbose_name="请求方式", help_text="请求方式")
    request_params = models.TextField(blank=True, null=True, verbose_name="请求参数",
                                      help_text="请求参数（批量请求可能超过 text）")
    response_content = models.TextField(blank=True, null=True, verbose_name="返回参数", help_text="返回参数")
    content = models.CharField(max_length=255, verbose_name="日志内容", help_text="日志内容")
    request_uri = models.CharField(max_length=255, blank=True, null=True, verbose_name="请求路径", help_text="请求路径")
    method = models.CharField(max_length=255, blank=True, null=True, verbose_name="方法名", help_text="方法名")
    ip = models.CharField(max_length=45, blank=True, null=True, verbose_name="IP地址", help_text="IP地址")
    province = models.CharField(max_length=100, blank=True, null=True, verbose_name="省份", help_text="省份")
    city = models.CharField(max_length=100, blank=True, null=True, verbose_name="城市", help_text="城市")
    execution_time = models.BigIntegerField(blank=True, null=True, verbose_name="执行时间", help_text="执行时间（毫秒）")
    browser = models.CharField(max_length=100, blank=True, null=True, verbose_name="浏览器", help_text="浏览器")
    browser_version = models.CharField(max_length=100, blank=True, null=True, verbose_name="浏览器版本",
                                       help_text="浏览器版本")
    os = models.CharField(max_length=100, blank=True, null=True, verbose_name="终端系统", help_text="终端系统")
    create_by = models.BigIntegerField(null=True, blank=True, verbose_name="创建人ID", help_text="创建人ID")
    create_time = models.DateTimeField(null=True, blank=True, verbose_name="创建时间", help_text="创建时间")
    is_deleted = models.SmallIntegerField(default=0, verbose_name="逻辑删除",
                                          help_text="逻辑删除标识（1-已删除, 0-未删除）")

    class Meta:
        db_table = 'sys_log'
        verbose_name = "日志表"
        verbose_name_plural = "日志表"

    def __str__(self):
        return f"{self.module} - {self.request_method}"


# ------------------------------
# 10. 系统配置表 (sys_config)
# ------------------------------
class SysConfig(models.Model):
    """
    表名：sys_config
    表说明：系统配置表，用于存储系统运行时的各项配置参数。
    """
    config_name = models.CharField(max_length=50, verbose_name="配置名称", help_text="配置名称")
    config_key = models.CharField(max_length=50, verbose_name="配置Key", help_text="配置Key")
    config_value = models.CharField(max_length=100, verbose_name="配置值", help_text="配置值")
    remark = models.CharField(max_length=255, blank=True, null=True, verbose_name="备注", help_text="备注")
    create_time = models.DateTimeField(null=True, blank=True, verbose_name="创建时间", help_text="创建时间")
    create_by = models.BigIntegerField(null=True, blank=True, verbose_name="创建人ID", help_text="创建人ID")
    update_time = models.DateTimeField(null=True, blank=True, verbose_name="更新时间", help_text="更新时间")
    update_by = models.BigIntegerField(null=True, blank=True, verbose_name="更新人ID", help_text="更新人ID")
    is_deleted = models.SmallIntegerField(default=0, verbose_name="逻辑删除",
                                          help_text="逻辑删除标识（0-未删除, 1-已删除）")

    class Meta:
        db_table = 'sys_config'
        verbose_name = "系统配置表"
        verbose_name_plural = "系统配置表"

    def __str__(self):
        return self.config_name


# ------------------------------
# 11. 通知公告表 (sys_notice)
# ------------------------------
class Notice(models.Model):
    """
    表名：sys_notice
    表说明：通知公告表，用于记录系统中发布的通知信息。
    """
    title = models.CharField(max_length=50, verbose_name="通知标题", help_text="通知标题")
    content = models.TextField(verbose_name="通知内容", help_text="通知内容")
    type = models.SmallIntegerField(verbose_name="通知类型", help_text="通知类型（关联字典编码：notice_type）")
    level = models.CharField(max_length=5, verbose_name="通知等级", help_text="通知等级（字典code：notice_level）")
    target_type = models.SmallIntegerField(verbose_name="目标类型", help_text="目标类型（1: 全体, 2: 指定）")
    target_user_ids = models.CharField(max_length=255, blank=True, null=True, verbose_name="目标用户ID集合",
                                       help_text="目标用户ID集合（多个使用英文逗号分隔）")
    publisher = models.BigIntegerField(null=True, blank=True, verbose_name="发布人ID", help_text="发布人ID")
    publish_status = models.SmallIntegerField(default=0, verbose_name="发布状态",
                                              help_text="发布状态（0: 未发布, 1: 已发布, -1: 已撤回）")
    publish_time = models.DateTimeField(null=True, blank=True, verbose_name="发布时间", help_text="发布时间")
    revoke_time = models.DateTimeField(null=True, blank=True, verbose_name="撤回时间", help_text="撤回时间")
    create_by = models.BigIntegerField(verbose_name="创建人ID", help_text="创建人ID")
    create_time = models.DateTimeField(verbose_name="创建时间", help_text="创建时间")
    update_by = models.BigIntegerField(null=True, blank=True, verbose_name="更新人ID", help_text="更新人ID")
    update_time = models.DateTimeField(null=True, blank=True, verbose_name="更新时间", help_text="更新时间")
    is_deleted = models.SmallIntegerField(default=0, verbose_name="是否删除",
                                          help_text="是否删除（0: 未删除, 1: 已删除）")

    class Meta:
        db_table = 'sys_notice'
        verbose_name = "通知公告表"
        verbose_name_plural = "通知公告表"

    def __str__(self):
        return self.title


# ------------------------------
# 12. 用户通知公告表 (sys_user_notice)
# ------------------------------
class UserNotice(models.Model):
    """
    表名：sys_user_notice
    表说明：用户通知公告表，用于记录用户对通知的接收与阅读状态。
    """
    notice = models.ForeignKey(Notice, on_delete=models.CASCADE, verbose_name="通知ID", help_text="通知ID")
    user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="用户ID", help_text="用户ID")
    is_read = models.SmallIntegerField(default=0, verbose_name="读取状态", help_text="读取状态（0: 未读, 1: 已读）")
    read_time = models.DateTimeField(null=True, blank=True, verbose_name="阅读时间", help_text="阅读时间")
    create_time = models.DateTimeField(verbose_name="创建时间", help_text="创建时间")
    update_time = models.DateTimeField(null=True, blank=True, verbose_name="更新时间", help_text="更新时间")
    is_deleted = models.SmallIntegerField(default=0, verbose_name="逻辑删除",
                                          help_text="逻辑删除（0: 未删除, 1: 已删除）")

    class Meta:
        db_table = 'sys_user_notice'
        verbose_name = "用户通知公告表"
        verbose_name_plural = "用户通知公告表"

    def __str__(self):
        return f"Notice {self.notice.id} for User {self.user.username}"


# ------------------------------
# 13. 代码生成配置表 (gen_config)
# ------------------------------
class GenConfig(models.Model):
    """
    表名：gen_config
    表说明：代码生成配置表，用于存储自动生成业务代码的相关配置信息。
    """
    table_name = models.CharField(max_length=100, unique=True, verbose_name="表名", help_text="数据库表名")
    module_name = models.CharField(max_length=100, blank=True, null=True, verbose_name="模块名", help_text="模块名称")
    package_name = models.CharField(max_length=255, verbose_name="包名", help_text="包名")
    business_name = models.CharField(max_length=100, verbose_name="业务名", help_text="业务名称")
    entity_name = models.CharField(max_length=100, verbose_name="实体类名", help_text="实体类名称")
    author = models.CharField(max_length=50, verbose_name="作者", help_text="代码作者")
    parent_menu_id = models.BigIntegerField(null=True, blank=True, verbose_name="上级菜单ID",
                                            help_text="上级菜单ID，对应 sys_menu 的 id")
    create_time = models.DateTimeField(null=True, blank=True, verbose_name="创建时间", help_text="创建时间")
    update_time = models.DateTimeField(null=True, blank=True, verbose_name="更新时间", help_text="更新时间")
    is_deleted = models.BooleanField(default=False, verbose_name="是否删除", help_text="是否删除")

    class Meta:
        db_table = 'gen_config'
        verbose_name = "代码生成配置表"
        verbose_name_plural = "代码生成配置表"

    def __str__(self):
        return self.table_name


# ------------------------------
# 14. 代码生成字段配置表 (gen_field_config)
# ------------------------------
class GenFieldConfig(models.Model):
    """
    表名：gen_field_config
    表说明：代码生成字段配置表，用于记录各字段的生成配置，辅助自动生成业务代码中的字段定义。
    """
    config = models.ForeignKey(GenConfig, on_delete=models.CASCADE, verbose_name="配置ID",
                               help_text="关联的代码生成配置ID")
    column_name = models.CharField(max_length=100, blank=True, null=True, verbose_name="数据库列名",
                                   help_text="数据库中的列名")
    column_type = models.CharField(max_length=50, blank=True, null=True, verbose_name="数据库列类型",
                                   help_text="数据库列类型")
    column_length = models.IntegerField(blank=True, null=True, verbose_name="列长度", help_text="数据库列长度")
    field_name = models.CharField(max_length=100, verbose_name="字段名称", help_text="字段名称")
    field_type = models.CharField(max_length=100, blank=True, null=True, verbose_name="字段类型",
                                  help_text="字段数据类型")
    field_sort = models.IntegerField(blank=True, null=True, verbose_name="字段排序", help_text="字段排序")
    field_comment = models.CharField(max_length=255, blank=True, null=True, verbose_name="字段描述",
                                     help_text="字段描述")
    max_length = models.IntegerField(blank=True, null=True, verbose_name="最大长度", help_text="字段最大长度")
    is_required = models.BooleanField(default=False, verbose_name="是否必填", help_text="是否必填")
    is_show_in_list = models.BooleanField(default=False, verbose_name="列表显示", help_text="是否在列表中显示")
    is_show_in_form = models.BooleanField(default=False, verbose_name="表单显示", help_text="是否在表单中显示")
    is_show_in_query = models.BooleanField(default=False, verbose_name="查询条件显示", help_text="是否在查询条件中显示")
    query_type = models.SmallIntegerField(blank=True, null=True, verbose_name="查询方式", help_text="查询方式")
    form_type = models.SmallIntegerField(blank=True, null=True, verbose_name="表单类型", help_text="表单类型")
    dict_type = models.CharField(max_length=50, blank=True, null=True, verbose_name="字典类型", help_text="字典类型")
    create_time = models.DateTimeField(null=True, blank=True, verbose_name="创建时间", help_text="创建时间")
    update_time = models.DateTimeField(null=True, blank=True, verbose_name="更新时间", help_text="更新时间")

    class Meta:
        db_table = 'gen_field_config'
        verbose_name = "代码生成字段配置表"
        verbose_name_plural = "代码生成字段配置表"

    def __str__(self):
        return self.field_name


# ------------------------------
# 15. 文件存储表 (sys_file)
# ------------------------------
class File(models.Model):
    """
    表名：sys_file
    表说明：文件存储表，用于存储文件的基本信息和存储路径。
    """
    file_name = models.CharField(max_length=255, verbose_name="文件名", help_text="文件名")
    file_path = models.CharField(max_length=255, verbose_name="文件路径", help_text="文件存储路径")
    file_size = models.BigIntegerField(verbose_name="文件大小", help_text="文件大小（字节）")
    file_type = models.CharField(max_length=50, verbose_name="文件类型", help_text="文件类型")
    create_time = models.DateTimeField(verbose_name="创建时间", help_text="创建时间")
    is_deleted = models.SmallIntegerField(default=0, verbose_name="是否删除", help_text="是否删除")
    create_by = models.BigIntegerField(verbose_name="创建人ID", help_text="创建人ID")
    delete_by = models.BigIntegerField(null=True, blank=True, verbose_name="删除人ID", help_text="删除人ID")
    delete_time = models.DateTimeField(null=True, blank=True, verbose_name="删除时间", help_text="删除时间")

    class Meta:
        db_table = 'sys_file'
        verbose_name = "文件存储表"
        verbose_name_plural = "文件存储表"

    def __str__(self):
        return self.file_name
    